package programaAndando;

import static org.junit.Assert.*;
import java.util.*;
import org.junit.Before;
import org.junit.Test;
import callForPapers.*;
import sistema.*;

public class CallForPaperPruebaFinal{

	CallForPaper callForPaper;
	
	Calendar fechaTopePresentacionCfpH;
	Calendar fechaTopeRevisionCfpH;
	
	Calendar altaHernan;
	Calendar altaPablo;
	Calendar altaAlejandro;
	Calendar altaXavier;
	
	Usuario hernan;
	Usuario pablo;
	Usuario alejandro;
	Usuario xavier;
	
	AreaDeInteres quimica;
	AreaDeInteres fisica;
	AreaDeInteres computacion;
	AreaDeInteres matematica;
	AreaDeInteres electronica;
	
	Paper paperH;
	Paper paperA;
	Paper paperP;
	
	Sistema sisA;
	Sistema sisB;
	Sistema sistema;
	
	@Before
	public void setUp() {
		
		quimica = new AreaDeInteres("Quimica");
		fisica = new AreaDeInteres("Fisica");
		matematica = new AreaDeInteres("Matematica");
		electronica = new AreaDeInteres("Electronica");
		computacion = new AreaDeInteres("Computacion");
		

		hernan = new Usuario("Hernan", "Costantini", "herni", "hdc", "costantinihernan@hotmail.com",altaHernan , quimica);
		
		pablo = new Usuario("pablo", "pepe", "pablete", "pablito", "pablitro@hotmail.com", altaPablo, computacion);
		
		alejandro = new Usuario("alejandro", "ravera", "alejandrito", "alejandrete", "killmes@hotmail.com", altaAlejandro, fisica);
		
		xavier = new Usuario("xavier", "charles", "pelado", "xmen", "xmen@hotmail.com", altaXavier, matematica);
		xavier.getAreasDeInteres().add(electronica);
		xavier.getAreasDeInteres().add(fisica);
		xavier.getAreasDeInteres().add(quimica);
		
		paperH = new Paper(hernan, quimica);
		
		paperA = new Paper(alejandro, fisica);
		
		paperP = new Paper(pablo, computacion);
		/*
		altaHernan.set(2012, 05, 22);
		
		altaPablo.set(2012, 04 , 21);
		
		altaAlejandro.set(2010, 03, 01);
		
		altaXavier.set(2012, 02, 15);
		*/
		sistema = Sistema.getInstance();
		sistema.agregarUsuario(alejandro);
		sistema.agregarUsuario(hernan);
		sistema.agregarUsuario(pablo);
		sistema.agregarUsuario(xavier);
		
		fechaTopePresentacionCfpH = Calendar.getInstance();
		fechaTopePresentacionCfpH.set(2012, 10, 1);
		
		fechaTopeRevisionCfpH = Calendar.getInstance();
		fechaTopeRevisionCfpH.set(2012, 11, 01);
	}
	
	@Test
	public void singletonTest() {
		
		sistema.getUsuarios().clear();
		sisA = Sistema.getInstance();
		sisB = Sistema.getInstance();
		
		sisA.agregarUsuario(alejandro);
		sisB.agregarUsuario(hernan);
		
		
		assertTrue(sisA.getUsuarios().contains(alejandro));
		assertTrue(sisB.getUsuarios().contains(hernan));
		
		assertTrue(sisA.getUsuarios().contains(hernan));
		assertTrue(sisB.getUsuarios().contains(alejandro));
		
		assertEquals(2, sisA.getUsuarios().size());
		
		sistema.getUsuarios().clear();
				
	}

	
	@Test
	public void testPrimero() {
		
		// tercer parrafo !!!!!!!!!!!
		hernan.crearCallForPaper("hernanCFP", fechaTopePresentacionCfpH , fechaTopeRevisionCfpH, quimica);
		
		assertEquals(1,sistema.getCfps().size());
		assertEquals(4,sistema.getUsuarios().size());
		
		CallForPaper cfp = sistema.getCfps().get(0);
		
		// cuarto parrafo !!!!!!!!!!!!!
		assertFalse(hernan.filtrarRevisoresPorAfinidad(cfp).isEmpty());
		assertTrue(hernan.filtrarRevisoresPorAfinidad(cfp).contains(xavier));
		
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
}


